package io.terminus.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.*;

import java.time.LocalDateTime;

/**
 * 用户表
 *
 * @author Melo
 */
@Data
@Builder
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@TableName("user")
public class User {

    /**
     * 物理主键
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 主管id
     */
    private Long managerId;

    /**
     * 创建时间
     * fill: 字段的自动填充
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;

    /**
     * 版本号，用于乐观锁控制
     */
    @Version
    private Integer version;

    /**
     * 逻辑删除标识
     * 1: 已删除; 0: 未删除
     * <p>
     * TableField(select = false): 查询列表中排除显示该字段
     * TableField(select = false)报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
     * 解决方案: 模型上添加NoArgsConstructor、AllArgsConstructor注解
     *
     * @see <a href="https://blog.csdn.net/weixin_64044453/article/details/125921038" />
     */
    @TableLogic
    @TableField(select = false)
    private Integer deleted;

}
